#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int w,a0[N],c[N],a[N],d[20][N<<2],T,n,m,ans[N],K,p2[20],X[4],is[N<<2],fl;
struct hbr{
    int l,r,mai,fa,R,G,sum,lz;
}t[N<<2];
//void upd(int p){
//    int x=d[t[p].R][t[p].G];
//    if(t[p<<1].lz&&t[p<<1|1].lz){
//        if(is[t[p<<1|x].lz]){
//            if(a[t[p<<1|x]>=t[p].R){
//                t[p].lz=t[p<<1|x].lz;
//
//            }else{
//                t[p].lz=t[p<<1|(x^1)].lz;
//
//            }
//        }else{
//
//        }
//    }
//}
void upd(int p,int y){
    int x=d[t[p].R][t[p].G];
    if(is[t[p<<1|x].lz]){
        if(a[t[p<<1|x].lz]>=t[p].R){
            t[p].lz=t[p<<1|x].lz;
            t[p].sum=t[p].lz;
        }else{
            t[p].lz=t[p<<1|(x^1)].lz;
            t[p].sum=t[p<<1|(x^1)].sum;
        }
    }
    if(t[p].lz)return;
    t[p].sum=t[p<<1|1].sum+t[p<<1].sum;
    if(y!=-1){
        if(x==y&&a[w]<t[p].R&&!fl){
                fl=1;
            t[p].sum-=w;
        }
    }
//    if(x==y){
//        if(a[w]>=t[p].R){
//            t[p].sum+=w;
//        }
//    }else{
//
//    }
}
void build(int p,int l,int r,int fa){
    t[p].l=l;
    t[p].r=r;
    t[p].fa=fa;
    t[p].R=t[fa].R-1;
    t[p].lz=0;
    t[p].sum=0;
    if(r==l){
        t[p].lz=l;
        t[p].sum=l;
        return;
    }
    t[p<<1].G=t[p].G<<1;
    t[p<<1|1].G=t[p].G<<1|1;
    int mid=(l+r)>>1;
    build(p<<1,l,mid,p);
    build(p<<1|1,mid+1,r,p);
    upd(p,-1);
}
void add(int p,int x){
    if(t[p].r==t[p].l){
        return;
    }
    int mid=(t[p].l+t[p].r)>>1;
    int t;
    if(x<=mid)add(p<<1,x),t=0;
    else add(p<<1|1,x),t=1;
    upd(p,t);
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a0[i];
    }
    for(int i=1;i<=m;i++){
        cin>>c[i];
    }
    int K=ceil(log2(1.0*n));
    p2[0]=1;
    for(int i=1;i<=K;i++){
        p2[i]=p2[i-1]*2;
    }
    for(int i=1;i<=K;i++){
        for(int j=0;j<p2[K-i];j++){
            char qw;
            cin>>qw;
            d[i][j]=qw-'0';
        }
    }
    cin>>T;
    while(T--){
        for(int i=0;i<4;i++){
            cin>>X[i];
        }
        for(int i=1;i<=n;i++){
            a[i]=a0[i]^X[i%4];
        }
        t[0].R=K+1;
        t[1].G=0;
        build(1,1,p2[K],0);
        for(int i=1;i<=n;i++){
            is[i]=1;
            w=i;
            fl=0;
            add(1,i);
            ans[i]=t[1<<(K-(int)ceil(log2(1.0*i)))].sum;
            //cout<<i<<' '<<ans[i]<<'\n';
        }
        int s=0;
        for(int i=1;i<=m;i++){
            s^=i*ans[c[i]];
        }
        cout<<s<<'\n';
    }
    return 0;
}
